package com.itdachang.design.structural.proxy.dynamic;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * JDK动态代理
 *
 * 代理对象与目标对象的相同点在于都是同一个接口
 * @author gcq
 * @Create 2022-02-11
 */
public class MainTest {
    public static void main(String[] args) {
        MainTikTok mainTikTok = new LeiTikTok();

        /**
         * 动态代理机制
         * 缺点：
         *  要求被代理对象必须有接口
         */
        MainTikTok proxy = JdkTikTokProxy.getProxy(mainTikTok);
        proxy.tiktok();

        ((SellTikTok)proxy).sell();
        /**
         * 不能代理被代理对象本类自己的方法，
         * 只能调用接口
         * proxy只能转为接口类
         */
//        ((LeiTikTok)proxy).sell();
        System.out.println(Arrays.asList(proxy.getClass().getInterfaces()));
    }
}